/**
 *  ClassName: BaseDao.java
 *  created on 2014-05-23
 *  Copyrights 2011-2012 ITVK.CN All rights reserved.
 *  site: http://WWW.ITVK.CN
 *  email: qjyong@gmail.com
 */
package com.lxq.dao.common;

import java.util.List;

/**
 * 泛型的通用Dao接口
 * @author HR
 */
public interface BaseDao<T> {

	/**
	 * 保存一个实例
	 * @param entity 要保存的实例 
	 */
	public void save(T entity);
	
	/**
	 * 根据主键删除一个实例 
	 * @param pk 主键值
	 */
	public void delete(Number pk);
	
	/**
	 * 更新指定实例的详细信息
	 * @param entity 实例 
	 */
	public void update(T entity);
	
	/**
	 * 判断指定主键对应的实体是否存在 
	 * @param pk 主键值
	 * @return 存在返回true;否则返回false
	 */
	public boolean exists(Number pk);
	
	/**
	 * 根据主键获取对应的实例 
	 * @param pk 主键值
	 * @return 如果查询成功，返回符合条件的实例;如果查询失败，返回null
	 */
	public T findOne(Number pk);
	
	/**
	 * 获取所有实体实例的列表
	 * @return 符合条件的实例列表
	 */
	public List<T> findAll();
	
	/**
	 * 统计总实体实例的数量
	 * @return 总数量
	 */
	public int count();
	
	/**
	 * 根据指定的SQL语句和参数值执行更新数据的操作
	 * @param sql SQL语句
	 * @param paramValues 参数值数组
	 */
	public void update(String sql, Object... paramValues);
	
	/**
	 * 根据指定的SQL语句和参数值执行查询数据的操作
	 * @param sql SQL语句
	 * @param paramValues 参数值
	 * @return 符合条件的实体对象列表
	 */
	public List<T> find(String sql, Object... paramValues);
	
	/**
	 * 根据指定的SQL语句和参数值执行单个对象的查询操作
	 * @param sql SQL语句
	 * @param paramValues 参数值
	 * @return 符合条件的实体对象
	 */
	public T findOne(String sql, Object... paramValues);
}
